package algorithms.question.class23;

import common.util.MyUtil;

/**
 * 给定一个数组arr，长度为N > 1
 * 从中间切一刀，保证左部分和右部分都有数字，一共有N-1种切法
 * 如此多的切法中，每一种都有:
 * 绝对值(左部分最大值 – 右部分最大值)
 * 返回最大的绝对值是多少
 *
 * @author guichang
 * @date 2021/8/30
 */

@SuppressWarnings("all")
public class Code2_切一刀最大的绝对值 {

    public static void main(String[] args) {
        int[] nums = MyUtil.createRandomArray(4, -5, 5);
        MyUtil.print(maxLR(nums));
    }

    /**
     * T: O(N)
     * S: O(1)
     */
    public static int maxLR(int[] nums) {
        if (nums == null || nums.length < 2) {
            return -1;
        }
        // 统计最大值
        int max = Integer.MIN_VALUE;
        for (int n : nums) {
            max = Math.max(max, n);
        }
        // 仅比较前后两个数即可
        int p1 = max - nums[0];
        int p2 = max - nums[nums.length - 1];
        return Math.abs(Math.max(p1, p2));
    }

}